package node;

import lexer.LexType;
import parser.Parser;

import java.io.IOException;

public class CharacterNode extends ASTNode {
    public final String name = "<Character>";
    // Character → CharConst
    private final String charConstStr;

    public CharacterNode(String charConst) {
        this.charConstStr = charConst;
    }

    @Override
    public void show() throws IOException {
        Parser.parserWriter.write(LexType.CHRCON + " " + charConstStr + "\n");
        Parser.parserWriter.write(name + "\n");
    }

    public int calculate() {
        // charConst 存储的是带有单引号的字符，例如'a'，也可能是转义字符，例如'\n'
        // 需要将其转换为对应的ASCII码
        // 输入：String charConstStr
        // 输出：一个int类型的数字
        if (charConstStr.length() == 3) {
            return charConstStr.charAt(1);
        } else {
            switch (charConstStr) {
                case "'\\n'":
                    return '\n';
                case "'\\t'":
                    return '\t';
                case "'\\''":
                    return '\'';
                case "'\\\\'":
                    return '\\';
                case "'\\0'":
                    return 0;
                default:
                    return -1;
            }
        }
    }

}
